#!/bin/sh







: ${VERBOSE:=0}
if [ $VERBOSE != 0 ]; then
    RMVERBARG=-v
else
    RMVERBARG=
fi

KAVBIN_DIR="/Library/Application Support/Kaspersky Lab/KAV/Binaries"

LAUNCHDAEMON_DIR="/Library/LaunchDaemons"
LAUNCHDAEMON_KAV_ID="com.kaspersky.kav"
LAUNCHDAEMON_KAV_PLIST="$LAUNCHDAEMON_DIR/$LAUNCHDAEMON_KAV_ID.plist"

LAUNCHDAEMON_KAVD_ID="com.kaspersky.kav.kavd"
LAUNCHDAEMON_KAVD_PLIST="$LAUNCHDAEMON_DIR/$LAUNCHDAEMON_KAVD_ID.plist"

if [ -f "$LAUNCHDAEMON_KAVD_PLIST" ]
then
    LAUNCHDAEMON_KAVD_EFFECTIVE_ID="$LAUNCHDAEMON_KAVD_ID"
    LAUNCHDAEMON_KAVD_EFFECTIVE_PLIST="$LAUNCHDAEMON_KAVD_PLIST"
    KAVD_REL_PATH="Kaspersky Anti-Virus For Mac.app/Contents/MacOS/kavd.app/Contents/MacOS/kavd"
else
    LAUNCHDAEMON_KAVD_EFFECTIVE_ID="$LAUNCHDAEMON_KAV_ID"
    LAUNCHDAEMON_KAVD_EFFECTIVE_PLIST="$LAUNCHDAEMON_KAV_PLIST"
    KAVD_REL_PATH="KAV/Binaries/kav"
fi

LAUNCHDAEMON_SYSEXTCTRLD_ID="com.kaspersky.sysextctrld"
LAUNCHDAEMON_SYSEXTCTRLD_PLIST="$LAUNCHDAEMON_DIR/$LAUNCHDAEMON_SYSEXTCTRLD_ID.plist"

LAUNCHAGENT_DIR="/Library/LaunchAgents"
LAUNCHAGENT_KAV_GUI_ID="com.kaspersky.kav.gui"
LAUNCHAGENT_KAV_GUI_PLIST="$LAUNCHAGENT_DIR/$LAUNCHAGENT_KAV_GUI_ID.plist"

LAUNCHCTL_AUTOUPDATE_DIR="/tmp"
LAUNCHCTL_AUTOUPDATE_ID="com.kaspersky.kav.autoupdater"
LAUNCHCTL_AUTOUPDATE_PLIST="$LAUNCHCTL_AUTOUPDATE_DIR/$LAUNCHCTL_AUTOUPDATE_ID.plist"

UNSIGNED_KEXT_DIR="/System/Library/Extensions"
SIGNED_KEXT_DIR="/Library/Extensions"

UNSIGNED_KLIF_KEXT_PATH="$UNSIGNED_KEXT_DIR"/klif.kext
SIGNED_KLIF_KEXT_PATH="$SIGNED_KEXT_DIR"/klif.kext
KLIF_BUNDLE_ID="com.kaspersky.kext.klif"

DELOLD_KLIF_BUNDLE_DIR="/Library/Application Support/Kaspersky Lab/klif/klif.kext"
DELOLD_KLIF_PLIST="/Library/LaunchDaemons/com.kaspersky.klif_loader.plist"

UNSIGNED_KLSAT_KEXT_PATH="$UNSIGNED_KEXT_DIR"/klsat.kext
SIGNED_KLSAT_KEXT_PATH="$SIGNED_KEXT_DIR"/klsat.kext
KLSAT_BUNDLE_ID="com.kaspersky.kext.klsat"

UNSIGNED_KLNKE_KEXT_PATH="$UNSIGNED_KEXT_DIR"/klnke.kext
SIGNED_KLNKE_KEXT_PATH="$SIGNED_KEXT_DIR"/klnke.kext
KLNKE_BUNDLE_ID="com.kaspersky.nke"

KLNKEINTERCEPTORS_BUNDLE_ID="com.kaspersky.nke.interceptors"
KLNKEINTERCEPTORS_KEXT_PATH="$UNSINGED_KEXT_DIR"/klnkeinterceptors.kext

KIMUL_BUNDLE_ID="com.kaspersky.kext.kimul"

MARK_BUNDLE_ID="com.kaspersky.kext.mark"

APP_BUNDLE="/Applications/Kaspersky Anti-Virus For Mac.app"
APP_BUNDLE_OLD="/Applications/Kaspersky Anti-Virus.app"

APPEX_BUNDLE_DIR="$APP_BUNDLE/Contents/PlugIns/KasperskySecurity.appex"

APP_SUPPORT_FOLDER="/Library/Application Support/Kaspersky Lab"
CACHES_FOLDER="/Library/Caches/com.kaspersky.kav"

LOG_DIR="Library/Logs/Kaspersky Lab"

SYSEXT_IDS_BASES_DROP="/var/.com_kaspersky_ids_drop_sysext"

USERS_DIR="/Users"
SCRIPT_DIR=$(dirname "$0")

LIB_RECEIPTS="/Library/Receipts"
LIB_RECEIPTS_OAS="$LIB_RECEIPTS"/oas.pkg
LIB_RECEIPTS_WEBAV="$LIB_RECEIPTS"/WebAV.pkg
LIB_RECEIPTS_PARCTL="$LIB_RECEIPTS"/ParCtl.pkg
LIB_RECEIPTS_CORE="$LIB_RECEIPTS"/Core.pkg
LIB_RECEIPTS_FINDERPLUGIN="$LIB_RECEIPTS"/FinderCMPlugin.pkg
LIB_RECEIPTS_WKS_OLD="$LIB_RECEIPTS"/wks.pkg
LIB_RECEIPTS_WKS="$LIB_RECEIPTS"/"Kaspersky Network Agent.pkg"
LIB_RECEIPTS_WKSCONNECTOR="$LIB_RECEIPTS"/"WKSConnector.pkg"
LIB_RECEIPTS_WEBTOOLBAR="$LIB_RECEIPTS"/"WebToolBar.pkg"
LIB_RECEIPTS_VKBD="$LIB_RECEIPTS"/"Vkbd.pkg"

KAV_SERVICE_LEGACY="/System/Library/Services/KAVService.service"
KAV_SERVICE="/Library/Services/KAVService.service"

KAVSYMLINK_DIR_LEGACY="/usr/bin"
KAVSYMLINK_DIR="/usr/local/bin"

MANPAGES_DIR="/usr/share/man/man1"

FINDER_PLUGIN="/Library/Contextual Menu Items/KavFinderCMPlugIn.plugin"


echo ""
echo "Removing the connection with klnagent..."
KL_NAGENT_FOLDER="$APP_SUPPORT_FOLDER/klnagent/"
KL_NAGENT_EXEC="$KL_NAGENT_FOLDER/Binaries/klnagent"
KL_NAGENT_CONF="$APP_SUPPORT_FOLDER/klnagent_conf/connectors64.d/kes11.conf"

if [ -e "$KL_NAGENT_CONF" ]
	then
		rm $RMVERBARG -rf "$KL_NAGENT_CONF";
		rmdir "$APP_SUPPORT_FOLDER/klnagent_conf/connectors64.d"
		rmdir "$APP_SUPPORT_FOLDER/klnagent_conf/"
		if [ -e "$KL_NAGENT_EXEC" ]
		then 
			"$KL_NAGENT_EXEC" -reload-connectors;
		fi
fi

kill_process_tree()
{
	local pid=$1

	for i in `ps -A -o pid,ppid | awk '$2 == '${pid}' { print $1 }'`; do
		kill_process_tree "$i"
	done

 	echo "Killing pid=$pid..."
	kill -s KILL $pid
}

remove_sysext_ids_bases_drop()
{

    echo ""
    echo "Processing \"$SYSEXT_IDS_BASES_DROP\" folder..."
    if [ -d "$SYSEXT_IDS_BASES_DROP" ]
    then
    rm $RMVERBARG -rf "$SYSEXT_IDS_BASES_DROP"
    fi
}

timedwait_pid()
{
 	local pid=$1
	local timeout=$2
	local interval=$3

	local initial_timeout=$timeout
	local isalive=$pid
	while [ "$isalive" != "" ] && [ $timeout -gt 0 ]; do
		sleep $interval
		isalive=$(ps -o pid -p $pid | grep $pid)
		((timeout -= interval))
		echo "timedwait_pid: Check pid=$pid isalive=$isalive, ETA to timeout=$timeout..."
	done

	if [ "$isalive" != "" ]; then
		echo "timedwait_pid: Hangup detected for pid=$pid during timeout=$initial_timeout"
		kill_process_tree $pid
		return 1
	fi
	echo "timedwait_pid: Command executed without hangup for pid=$pid"
	wait $pid
	return $?
}


echo ""
echo "Quitting product..."
KAVPID=$(ps -axwo pid,command | grep -v grep | grep "$KAVD_REL_PATH" | awk '{print $1}')
if [ "$KAVPID" != "" ]
then
    echo "/usr/local/bin/kav stop Protection"
    ( /usr/local/bin/kav stop Protection ) &
    BYEPROTECTION=$!
    timedwait_pid $BYEPROTECTION 60 1


    remove_sysext_ids_bases_drop

    echo "/usr/local/bin/kav exit"
    ( /usr/local/bin/kav exit ) &
    KAVSHELLPID=$!
    timedwait_pid $KAVSHELLPID 60 1
fi


SYSEXT_NAME="com.kaspersky.kav.sysext"

(systemextensionsctl list | grep $SYSEXT_NAME) > /dev/null 2>&1

if [ $? == 0 ]; then
    echo ""
    echo "Deactivating system extension..."


    echo "Calling kav to deactivate the extension"
    ( /usr/local/bin/kav uninstall_sysext ) &









    UNINSTALLSYSEXTPID=$!
    timedwait_pid $UNINSTALLSYSEXTPID 120 1

    if [ $? == 0 ]; then
        echo "System extension deactivated sysext process (if any) will be pkilled after daemon unload"
    else
        echo "Failed to deactivate system extension"
        sleep 2
    fi
fi


echo ""
echo "Stopping service..."
for CURRENT_KAV_SERVICE in "$KAV_SERVICE_LEGACY" "$KAV_SERVICE"
do
	KAVPID=$(ps -axwo pid,command | grep -v grep | grep "$CURRENT_KAV_SERVICE" | awk '{print $1}')
	if [ "$KAVPID" != "" ]
	then
		kill -s KILL $KAVPID
	fi
done


echo ""
echo "Stopping application..."
KAVPID=$(ps -axwo pid,command | grep -v grep | grep "Contents/MacOS/kav_app" | awk '{print $1}')
if [ "$KAVPID" != "" ]
then
	kill -s KILL $KAVPID
fi


echo ""
echo "Stopping application..."
KAVPID=$(ps -axwo pid,command | grep -v grep | grep "Contents/MacOS/kav" | awk '{print $1}')
if [ "$KAVPID" != "" ]
then
	kill -s KILL $KAVPID
fi


echo ""
echo "Stopping agent..."
KAVPID=$(ps -axwo pid,command | grep -v grep | grep "Contents/MacOS/kav_agent" | awk '{print $1}')
if [ "$KAVPID" != "" ]
then
	kill -s KILL $KAVPID
fi


echo ""
echo "Stopping daemon..."
KAVPID=$(ps -axwo pid,command | grep -v grep | grep "$KAVD_REL_PATH" | awk '{print $1}')
if [ "$KAVPID" != "" ]
then
	kill -s TERM $KAVPID
	for ((t = 0; t < 10; t++))
	do
		PID=$(ps -axwo pid,command $KAVPID | grep -v grep | grep "$KAVD_REL_PATH" | awk '{print $1}')
		if [ "$PID" == "$KAVPID" ]
		then
			sleep 0.5
		else
			break
		fi
	done
fi


echo ""
echo "Unloading daemon from launchd..."
if [ "$(launchctl list | grep $LAUNCHDAEMON_KAVD_EFFECTIVE_ID)" != "" ]
then
	launchctl unload "$LAUNCHDAEMON_KAVD_EFFECTIVE_PLIST"
fi


echo ""
echo "Unloading system extension controller daemon from launchd..."
if [ "$(launchctl list | grep $LAUNCHDAEMON_SYSEXTCTRLD_ID)" != "" ]
then
    launchctl unload "$LAUNCHDAEMON_SYSEXTCTRLD_PLIST"
fi

get_driver_legacy_references_path()
{
    echo "$1/Contents/.References.plist"
}

get_driver_references_path()
{
	echo "/Library/Application Support/Kaspersky Lab/Shared/$1.references"
}

get_dependent_products()
{
	if [ ! -f "$1" ]; then
		echo ""
		return 0
	fi

    echo cat '/plist/dict/key[text()="KLProducts"]/following-sibling::dict[position()=1]/key/text()' |	\
         xmllint --shell "$1" |										\
         grep -v "^/ >" |											\
         grep -v "^ \-\-\-\-\-"
}

remove_product_dependency_for_driver()
{
    local driver_path="$2"/"$1".kext
	local legacy_references_path=$(get_driver_legacy_references_path ${driver_path})
	local references_path=$(get_driver_references_path "$1")

    if [ ! -d "${driver_path}" ]; then
        echo "Path ${driver_path} does not exist"
        return 1
    fi

    if [ -f "${references_path}" ]; then
		/usr/libexec/PlistBuddy -c "Delete :KLProducts:$3" "${references_path}" &> /dev/null
    fi

	if [ -f "${legacy_references_path}" ]; then
		/usr/libexec/PlistBuddy -c "Delete :KLProducts:$3" "${legacy_references_path}" &> /dev/null
	fi
}

remove_product_dependency_for_driver "klif" "/System/Library/Extensions" "com.kaspersky.kav"
remove_product_dependency_for_driver "klif" "/Library/Extensions" "com.kaspersky.kav"

if [ -d "$UNSIGNED_KLIF_KEXT_PATH" ]
then
	legacy_references_path=$(get_driver_legacy_references_path "$UNSIGNED_KLIF_KEXT_PATH")
    klif_products=$(get_dependent_products "$legacy_references_path")
    if [ "$klif_products" == "" ]; then
        rm $RMVERBARG -rf "$UNSIGNED_KLIF_KEXT_PATH"
    fi
fi
if [ -d "$SIGNED_KLIF_KEXT_PATH" ]
then
	legacy_references_path=$(get_driver_legacy_references_path "$SIGNED_KLIF_KEXT_PATH")
	klif_legacy_products=$(get_dependent_products "$legacy_references_path")
	references_path=$(get_driver_references_path "klif")
	klif_products=$(get_dependent_products "$references_path")
	if [ "$klif_products" == "" ] && [ "$klif_legacy_products" == "" ]; then
		rm $RMVERBARG -rf "$SIGNED_KLIF_KEXT_PATH"
		rm $RMVERBARG -rf "$references_path"
	fi
fi

rm -rf "/System/Library/Extensions/klif.patch"


echo ""
echo "Unloading klif kernel extensions (if any)..."
if [ "$(kextstat | grep ${KLIF_BUNDLE_ID})" != "" ] && [ ! -d "$UNSIGNED_KLIF_KEXT_PATH" ] && [ ! -d "$SIGNED_KLIF_KEXT_PATH" ]
then
    kextunload -b "$KLIF_BUNDLE_ID"
fi


if [ -d "$DELOLD_KLIF_BUNDLE_DIR" ]
then
	rm $RMVERBARG -rf "$DELOLD_KLIF_BUNDLE_DIR"
fi



if [ -e "$DELOLD_KLIF_PLIST" ]
then
	rm $RMVERBARG -rf "$DELOLD_KLIF_PLIST"
fi

remove_product_dependency_for_driver "klsat" "/System/Library/Extensions" "com.kaspersky.kav"
remove_product_dependency_for_driver "klsat" "/Library/Extensions" "com.kaspersky.kav"

if [ -d "$UNSIGNED_KLSAT_KEXT_PATH" ]
then
	legacy_references_path=$(get_driver_legacy_references_path "$UNSIGNED_KLSAT_KEXT_PATH")
    klsat_products=$(get_dependent_products "$legacy_references_path")
    if [ "$klsat_products" == "" ]; then
        rm $RMVERBARG -rf "$UNSIGNED_KLSAT_KEXT_PATH"
    fi
fi
if [ -d "$SIGNED_KLSAT_KEXT_PATH" ]
then
	legacy_references_path=$(get_driver_legacy_references_path "$SIGNED_KLSAT_KEXT_PATH")
	klsat_legacy_products=$(get_dependent_products "$legacy_references_path")
	references_path=$(get_driver_references_path "klsat")
	klsat_products=$(get_dependent_products "$references_path")
	if [ "$klsat_products" == "" ] && [ "$klsat_legacy_products" == "" ]; then
		rm $RMVERBARG -rf "$SIGNED_KLSAT_KEXT_PATH"
		rm $RMVERBARG -rf "$references_path"
	fi
fi


echo ""
echo "Unloading klsat kernel extensions (if any)..."
if [ "$(kextstat | grep ${KLSAT_BUNDLE_ID})" != "" ] && [ ! -d "$UNSIGNED_KLSAT_KEXT_PATH" ] && [ ! -d "$SIGNED_KLSAT_KEXT_PATH" ]
then
	

	devices=$(diskutil list external physical | awk '/dev/{print $1}')
	deviceArr=$(echo $devices | tr " " "\n")
	for dev in $deviceArr
	do
	    hdiutil eject -force  $dev
	done
    kextunload -b "$KLSAT_BUNDLE_ID"
fi


remove_product_dependency_for_driver "klnke" "/System/Library/Extensions" "com.kaspersky.kav"
remove_product_dependency_for_driver "klnke" "/Library/Extensions" "com.kaspersky.kav"

if [ -d "$UNSIGNED_KLNKE_KEXT_PATH" ]
then
	legacy_references_path=$(get_driver_legacy_references_path "$UNSIGNED_KLNKE_KEXT_PATH")
	klnke_products=$(get_dependent_products "$legacy_references_path")
	if [ "$klnke_products" == "" ]; then
		rm $RMVERBARG -rf "$UNSIGNED_KLNKE_KEXT_PATH"
	fi
fi
if [ -d "$SIGNED_KLNKE_KEXT_PATH" ]
then
	legacy_references_path=$(get_driver_legacy_references_path "$SIGNED_KLNKE_KEXT_PATH")
	klnke_legacy_products=$(get_dependent_products "$legacy_references_path")
	references_path=$(get_driver_references_path "klnke")
	klnke_products=$(get_dependent_products "$references_path")
	if [ "$klnke_products" == "" ] && [ "$klnke_legacy_products" == "" ]; then
		rm $RMVERBARG -rf "$SIGNED_KLNKE_KEXT_PATH"
		rm $RMVERBARG -rf "$references_path"
	fi
fi


echo ""
echo "Unloading klnke kernel extensions (if any)..."
if [ "$(kextstat | grep ${KLNKE_BUNDLE_ID})" != "" ] && [ ! -d "$UNSIGNED_KLNKE_KEXT_PATH" ] && [ ! -d "$SIGNED_KLNKE_KEXT_PATH" ]
then
	kextunload -b "$KLNKE_BUNDLE_ID"
fi



echo ""
echo "Unloading klnkeinterceptors kernel extensions (if any)..."
if [ "$(kextstat | grep ${KLNKEINTERCEPTORS_BUNDLE_ID})" != "" ]
then
	kextunload -b "$KLNKEINTERCEPTORS_BUNDLE_ID"
fi


if [ -d "$UNSIGNED_KLNKEINTERCEPTORS_KEXT_PATH" ]
then
	rm $RMVERBARG -rf "$UNSIGNED_KLNKEINTERCEPTORS_KEXT_PATH"
fi


echo ""
echo "Unloading kimul kernel extensions (if any)..."
KIMULS=$(kextstat -l | grep "${KIMUL_BUNDLE_ID}" | awk '{print $6}')
if [ "$KIMULS" != "" ]
then
    for KIMUL in $KIMULS
    do
		kextunload -b "$KIMUL"
    done
fi


echo ""
echo "Unloading mark kernel extensions (if any)..."
MARKS=$(kextstat -l | grep "${MARK_BUNDLE_ID}" | awk '{print $6}')
if [ "$MARKS" != "" ]
then
    for MARK in $MARKS
    do
		kextunload -b "$MARK"
    done
fi


if [ -f "$LAUNCHDAEMON_KAV_PLIST" ]
then
	rm $RMVERBARG "$LAUNCHDAEMON_KAV_PLIST"
fi


if [ -f "$LAUNCHDAEMON_KAVD_PLIST" ]
then
	rm $RMVERBARG "$LAUNCHDAEMON_KAVD_PLIST"
fi


if [ -f "$LAUNCHAGENT_KAV_GUI_PLIST" ]
then
	sudo -u "$USER" launchctl unload "$LAUNCHAGENT_KAV_GUI_PLIST"
	rm $RMVERBARG "$LAUNCHAGENT_KAV_GUI_PLIST"
fi


if [ -f "$LAUNCHCTL_AUTOUPDATE_PLIST" ]
then
	sudo -u "$USER" launchctl unload "$LAUNCHCTL_AUTOUPDATE_PLIST"
	rm $RMVERBARG "$LAUNCHCTL_AUTOUPDATE_PLIST"
fi


echo ""
echo "Unregistering \"$APPEX_BUNDLE_DIR\" bundle..."
pluginkit -r "$APPEX_BUNDLE_DIR"


echo ""
echo "Processing \"$APP_BUNDLE\" bundle..."
if [ -d "$APP_BUNDLE" ]
then
    chflags -v nouchg "$APP_BUNDLE"
	rm $RMVERBARG -rf "$APP_BUNDLE"
fi


echo ""
echo "Processing \"$APP_BUNDLE_OLD\" bundle..."
if [ -d "$APP_BUNDLE_OLD" ]
then
	rm $RMVERBARG -rf "$APP_BUNDLE_OLD"
fi


echo ""
echo "Processing \"/$APP_SUPPORT_FOLDER\" folder..."
if [ -d "/$APP_SUPPORT_FOLDER" ]
then
	rm $RMVERBARG -rf "/$APP_SUPPORT_FOLDER/KAV"


	if [ -d "$APP_SUPPORT_FOLDER/Shared" ] && [ $(ls -l "$APP_SUPPORT_FOLDER/Shared" | grep -v "DS_Store" | wc -l) -eq 0 ]
	then
		rm $RMVERBARG -rf "$APP_SUPPORT_FOLDER/Shared"
	fi

	if [ -d "$APP_SUPPORT_FOLDER/UCP" ] && [ $(ls -l "$APP_SUPPORT_FOLDER" | grep "^d" | wc -l) -eq 1 ]
	then
		rm $RMVERBARG -rf "$APP_SUPPORT_FOLDER/UCP"
	fi
fi


echo ""
echo "Processing \"$SYSEXT_IDS_BASES_DROP\" folder..."
if [ -d "$SYSEXT_IDS_BASES_DROP" ]
then
	rm $RMVERBARG -rf "$SYSEXT_IDS_BASES_DROP"
fi


for USERHOME in $(ls "$USERS_DIR")
do
	if [ -d "$USERS_DIR/$USERHOME/$APP_SUPPORT_FOLDER" ]
	then
		echo ""
		echo "Processing \"$USERS_DIR/$USERHOME/$APP_SUPPORT_FOLDER/KAV\" folder..."
		rm $RMVERBARG -rf "$USERS_DIR/$USERHOME/$APP_SUPPORT_FOLDER/KAV"

		if ([ -d "$USERS_DIR/$USERHOME/$APP_SUPPORT_FOLDER/UCP" ] && [ $(ls -l "$USERS_DIR/$USERHOME/$APP_SUPPORT_FOLDER" | grep "^d" | wc -l) -eq 1 ]) || [ $(ls -l "$USERS_DIR/$USERHOME/$APP_SUPPORT_FOLDER" | grep "^d" | wc -l) -eq 0 ]
		then
			rm $RMVERBARG -rf "$USERS_DIR/$USERHOME/$APP_SUPPORT_FOLDER"
		fi
	fi
done


echo ""
echo "Removing caches..."
if [ -d "$CACHES_FOLDER" ]
then
	rm $RMVERBARG -rf "$CACHES_FOLDER"
fi



echo ""
echo "Removing service..."
for CURRENT_KAV_SERVICE in "$KAV_SERVICE" "$KAV_SERVICE_LEGACY"
do
	if [ -d "$CURRENT_KAV_SERVICE" ]
	then
		rm $RMVERBARG -rf "$CURRENT_KAV_SERVICE"

		OSMINOR=$(sw_vers -productVersion | awk -F"." '{printf "%d\n", $2}')

		if [ $OSMINOR -gt 4 ]
		then
			sudo -u "$USER" /System/Library/CoreServices/pbs -existing_languages
		fi
	fi
done


rm $RMVERBARG -f /usr/local/bin/kav_sysextctrl



echo
echo "Removing symbolic link..."
for CURRENT_KAVSYMLINK_DIR in "$KAVSYMLINK_DIR" "$KAVSYMLINK_DIR_LEGACY"
do
	if [ -e "$CURRENT_KAVSYMLINK_DIR"/kav ]
	then
		rm $RMVERBARG -f "$CURRENT_KAVSYMLINK_DIR"/kav
	fi
done

for USERHOME in $(ls "$USERS_DIR")
do
	for SCOPE in kav kav2012 kav_agent
	do
		if [ -f "$USERS_DIR/$USERHOME/Library/Preferences/com.kaspersky.$SCOPE.plist" ]
		then
			rm $RMVERBARG -f "$USERS_DIR/$USERHOME/Library/Preferences/com.kaspersky.$SCOPE.plist"
			rm $RMVERBARG -f "$USERS_DIR/$USERHOME/Library/Preferences/com.kaspersky.$SCOPE.plist.lockfile"
		fi
	done
done


for USERHOME in $(ls "$USERS_DIR")
do
	if [ -d "$USERS_DIR/$USERHOME/Library/Containers/com.kaspersky.kav.kaspersky_security" ]
	then
		rm $RMVERBARG -rf "$USERS_DIR/$USERHOME/Library/Containers/com.kaspersky.kav.kaspersky_security"
	fi
done


echo
echo "Removing authorization rights..."
/usr/bin/security authorizationdb remove com.kaspersky.licensing >/dev/null 2>&1
/usr/bin/security authorizationdb remove com.kaspersky.preferences >/dev/null 2>&1
/usr/bin/security authorizationdb remove com.kaspersky.parental >/dev/null 2>&1
/usr/bin/security authorizationdb remove com.kaspersky.parental.add_url_white >/dev/null 2>&1


echo
echo "Removing personal certificate"
/usr/bin/security delete-certificate -c "Kaspersky Web Anti-Virus Certification Authority" /Library/Keychains/System.keychain 2>&1


echo
echo "Removing man pages..."
rm $RMVERBARG -f "$MANPAGES_DIR"/kav.1


echo ""
echo "Removing Finder Contextual Menu..."
if [ -d "$FINDER_PLUGIN" ]
then
	rm $RMVERBARG -rf "$FINDER_PLUGIN"
	osascript -e 'tell application "Finder"' -e 'quit' -e 'delay 2' -e 'select window of desktop' -e 'end tell'
	osascript -e 'tell application "Kaspersky Uninstaller"' -e 'activate' -e 'end tell'
fi


echo ""
echo "Removing daemon traces from \"/$LOG_DIR\"..."
if [ -d "/$LOG_DIR" ]
then
	rm $RMVERBARG -rf "/$LOG_DIR"
fi

echo ""
echo "Removing daemon traces from \"/var/log\"..."
rm $RMVERBARG -f /var/log/kav_daemon*.log

echo ""
echo "Removing last crash timestamp from \"/var/log\"..."
rm $RMVERBARG -f /var/log/kes_last_crash_timestamp.txt


for USERHOME in $(ls "$USERS_DIR")
do
	echo ""
	echo "Removing gui traces from \"$USERS_DIR/$USERHOME/$LOG_DIR\"..."
	rm $RMVERBARG -rf "$USERS_DIR/$USERHOME/$LOG_DIR"
done



echo ""
echo "Processing \"$LIB_RECEIPTS_CORE\" installer receipt..."
if [ -d "$LIB_RECEIPTS_CORE" ]
then
	rm $RMVERBARG -rf "$LIB_RECEIPTS_CORE"
fi

echo "Processing \"$LIB_RECEIPTS_OAS\" installer receipt..."
if [ -d "$LIB_RECEIPTS_OAS" ]
then
	rm $RMVERBARG -rf "$LIB_RECEIPTS_OAS"
fi

echo "Processing \"$LIB_RECEIPTS_WEBAV\" installer receipt..."
if [ -d "$LIB_RECEIPTS_WEBAV" ]
then
	rm $RMVERBARG -rf "$LIB_RECEIPTS_WEBAV"
fi

echo "Processing \"$LIB_RECEIPTS_PARCTL\" installer receipt..."
if [ -d "$LIB_RECEIPTS_PARCTL" ]
then
	rm $RMVERBARG -rf "$LIB_RECEIPTS_PARCTL"
fi

echo "Processing \"$LIB_RECEIPTS_FINDERPLUGIN\" installer receipt..."
if [ -d "$LIB_RECEIPTS_FINDERPLUGIN" ]
then
	rm $RMVERBARG -rf "$LIB_RECEIPTS_FINDERPLUGIN"
fi

echo "Processing \"$LIB_RECEIPTS_WKS\" installer receipt..."
if [ -d "$LIB_RECEIPTS_WKS" ]
then
	rm $RMVERBARG -rf "$LIB_RECEIPTS_WKS"
fi

echo "Processing \"$LIB_RECEIPTS_WKSCONNECTOR\" installer receipt..."
if [ -d "$LIB_RECEIPTS_WKS" ]
then
	rm $RMVERBARG -rf "$LIB_RECEIPTS_WKSCONNECTOR"
fi

echo "Processing \"$LIB_RECEIPTS_WKS_OLD\" installer receipt..."
if [ -d "$LIB_RECEIPTS_WKS_OLD" ]
then
	rm $RMVERBARG -rf "$LIB_RECEIPTS_WKS_OLD"
fi

echo "Processing \"$LIB_RECEIPTS_WEBTOOLBAR\" installer receipt..."
if [ -d "$LIB_RECEIPTS_WEBTOOLBAR" ]
then
	rm $RMVERBARG -rf "$LIB_RECEIPTS_WEBTOOLBAR"
fi

echo "Processing \"$LIB_RECEIPTS_VKBD\" installer receipt..."
if [ -d "$LIB_RECEIPTS_VKBD" ]
then
	rm $RMVERBARG -rf "$LIB_RECEIPTS_VKBD"
fi


perform_shared_container_check_out() {

SHARED_CONTAINER_RELPATH="Library/Group Containers/2Y8XE5CQ94.com.kaspersky.mac"
INTERACTIVE_USERS=$(dscacheutil -q user | grep -e uid:\ 5'[0-9][0-9]' | sed 's/uid: \(.*\)/\1/')
for INTERACTIVE_USER in $INTERACTIVE_USERS; do
	echo "Performing shared container checkin for user $INTERACTIVE_USER"
	INTERACTIVE_USER_HOME=$(dscacheutil -q user| grep -A 3 -e uid:\ "$INTERACTIVE_USER" | grep -e dir:\  | sed 's/dir: \(.*\)/\1/')

	[ ! -d "$INTERACTIVE_USER_HOME/Library" ] && continue
	[ ! -d "$INTERACTIVE_USER_HOME/Library/Group Containers" ] && continue
	[ ! -d "$INTERACTIVE_USER_HOME"/"$SHARED_CONTAINER_RELPATH" ] && continue

	REGISTRY_PATH="$INTERACTIVE_USER_HOME"/"$SHARED_CONTAINER_RELPATH"/Registry.plist
	[ ! -f "$REGISTRY_PATH" ] && continue

	/usr/libexec/PlistBuddy -c "Print :KLInstalledProducts:" "$REGISTRY_PATH" | grep -q $1
	if [ $? == 0 ]; then
		/usr/libexec/PlistBuddy -c "Delete :KLInstalledProducts: string $1" "$REGISTRY_PATH" &> /dev/null
	fi

	/usr/libexec/PlistBuddy -c "Print :XspKisLicesnse" "$REGISTRY_PATH" &> /dev/null
	if [ $? == 0 ]; then
		echo "Deleting xSP info"
		/usr/libexec/PlistBuddy -c "Delete :XspKisLicesnse" "$REGISTRY_PATH" &> /dev/null
	fi
done

return 0

}


perform_shared_container_check_out "com.kaspersky.kis"
perform_shared_container_check_out "com.kaspersky.saas"


NM_HOST_MANIFEST_NAME="com.kaspersky.kav_agent.nm.json"
MOZILLA_NM_HOST_MANIFEST_PATH="/Library/Application Support/Mozilla/NativeMessagingHosts"/$NM_HOST_MANIFEST_NAME
CHROME_NM_HOST_MANIFEST_PATH="/Library/Google/Chrome/NativeMessagingHosts"/$NM_HOST_MANIFEST_NAME

rm $RMVERBARG "$MOZILLA_NM_HOST_MANIFEST_PATH"
rm $RMVERBARG "$CHROME_NM_HOST_MANIFEST_PATH"


rmdir "/Library/Application Support/Kaspersky Lab"



if [ -e "/usr/sbin/pkgutil" ]
then
	echo "Forgetting installation packages..."

	CORE_PKG_ID="com.kaspersky.kav.core";
	OAS_PKG_ID="com.kaspersky.kav.oas";
	WEBAV_PKG_ID="com.kaspersky.kav.webav";
	PARCTL_PKG_ID="com.kaspersky.kav.parctl";
	WKSCONN_PKG_ID="com.kaspersky.kav.wksconnector";
	WEBTOOLBAR_PKG_ID="com.kaspersky.kav.webtoolbar";
	VKBD_PKG_ID="com.kaspersky.kav.vkbd";
	FINDER_PLUGIN_PKG_ID="com.kaspersky.kav.finder_plugin";







	if [ "$(pkgutil --pkgs | grep $CORE_PKG_ID)" != "" ]
	then
		echo "Forgetting Virus Scan..."
		pkgutil --forget $CORE_PKG_ID
	fi

	if [ "$(pkgutil --pkgs | grep $OAS_PKG_ID)" != "" ]
	then
		echo "Forgetting File Anti-Virus..."
		pkgutil --forget $OAS_PKG_ID
	fi

	if [ "$(pkgutil --pkgs | grep $WEBAV_PKG_ID)" != "" ]
	then
		echo "Forgetting Web Anti-Virus..."
		pkgutil --forget $WEBAV_PKG_ID
	fi

	if [ "$(pkgutil --pkgs | grep $PARCTL_PKG_ID)" != "" ]
	then
		echo "Forgettings Parental Control..."
		pkgutil --forget $PARCTL_PKG_ID
	fi

	if [ "$(pkgutil --pkgs | grep $WKSCONN_PKG_ID)" != "" ]
	then
		echo "Forgetting Network Agent Connector..."
		pkgutil --forget $WKSCONN_PKG_ID
	fi

	if [ "$(pkgutil --pkgs | grep $FINDER_PLUGIN_PKG_ID)" != "" ]
	then
		echo "Forgetting Finder Plugin..."
		pkgutil --forget $FINDER_PLUGIN_PKG_ID
	fi

	if [ "$(pkgutil --pkgs | grep $WEBTOOLBAR_PKG_ID)" != "" ]
	then
		echo "Forgetting URL Advisor..."
		pkgutil --forget $WEBTOOLBAR_PKG_ID
	fi

	if [ "$(pkgutil --pkgs | grep $VKBD_PKG_ID)" != "" ]
	then
		echo "Forgetting Virtual Keybord..."
		pkgutil --forget $VKBD_PKG_ID
	fi

fi

echo ""
echo "Kaspersky Anti-Virus for Mac is successfully uninstalled from your computer."
